import torch
from torch.optim import SGD

# 定义向量函数
def vector_function(x):
    return torch.sum(x ** 2)

# 初始化参数
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)

# 定义优化器
optimizer = SGD([x], lr=0.1)

# 进行优化
for i in range(100):
    optimizer.zero_grad()  # 清零梯度
    output = vector_function(x)  # 计算函数值
    output.backward()  # 计算梯度
    optimizer.step()  # 更新参数
    
    # 输出梯度
    print("Iteration:", i+1)
    print("Gradients:", x.grad)
    print()

# 打印最优解
print("Optimal solution:", x.detach().numpy())

